/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import dao.AmigoDao;
import dao.PersonaDao;
import java.awt.CardLayout;
import java.awt.Color;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import modelo.Amigo;
import modelo.Persona;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import vista.JDialogBarra;
import vista.JDialogGrafica;

/**
 *
 * @author Elias Mendoza
 */
public class Estadistico {

  private DefaultTableModel modeloTabla = new DefaultTableModel();
  private Object[] filaTabla;

  public int calculaTotalPersonas() {
    PersonaDao p = new PersonaDao();
    return p.totalPersonas();
  }

  public int calculaTotalAmigos() {
    AmigoDao a = new AmigoDao();
    return a.totalAmigos();
  }

  public void inicializaTabla(JTable tabla) {
    tabla.setModel(modeloTabla);
    modeloTabla.addColumn("Seccion");
    modeloTabla.addColumn("No. Personas");
    filaTabla = new Object[2];
  }

  public void addFilaTabla(String seccion, String numeroPersonas) {
    filaTabla[0] = seccion;
    filaTabla[1] = numeroPersonas;

    modeloTabla.addRow(filaTabla);
  }

  public void calculaPersonasBySeccion() {


    PersonaDao p = new PersonaDao();
    List lista = p.numeroPersonasBySeccion();
    for (Object obj : lista) {
      Object[] array = (Object[]) obj;
      addFilaTabla(array[0].toString(), array[1].toString());

    }
  }

  public void llenaListaAmigos(JList lista) {
    DefaultListModel modelo = new DefaultListModel();
    List list = new AmigoDao().amigos();
    for (Object obj : list) {
      Amigo amigo = (Amigo) obj;
      modelo.addElement(amigo);
    }
    lista.setModel(modelo);
  }

  public void llenaListaPersonasByAmigo(JList lista, Amigo amigo, JLabel label) {
    DefaultListModel modelo = new DefaultListModel();
    List list = new PersonaDao().personasByAmigo(amigo.getId());
    label.setText(list.size() + "");
    for (Object obj : list) {
      Persona persona = (Persona) obj;
      modelo.addElement(persona);
    }
    lista.setModel(modelo);
  }

  public void graficarSeccines(JTable tabla) {

    DefaultTableModel model = (DefaultTableModel) tabla.getModel();
    if (model.getRowCount() > 1) {
      DefaultCategoryDataset dataset = new DefaultCategoryDataset();

      for (int i = 0; i < model.getRowCount(); i++) {
        dataset.addValue(Integer.parseInt(model.getValueAt(i, 1).toString()), "seccion", model.getValueAt(i, 0).toString());
      }
      JFreeChart chart = ChartFactory.createBarChart3D("Personas por Sección", "Seccion", "Num. Personas", dataset, PlotOrientation.VERTICAL, true, true, true);
      CategoryPlot plot = (CategoryPlot) chart.getCategoryPlot();
      plot.setBackgroundPaint(Color.WHITE);
      plot.setDomainGridlinePaint(Color.WHITE);
      plot.setRangeGridlinePaint(Color.WHITE);

      JDialogGrafica dialog = new JDialogGrafica(null, true);
      ChartPanel grafico = new ChartPanel(chart);
      aderirPanel(grafico, dialog.jPanelContenedor);
      dialog.setVisible(true);
    } else {
      JOptionPane.showConfirmDialog(null, "No hay datos que graficar");
    }
  }

  public void aderirPanel(JPanel panel, JPanel contenedorPanel) {
    contenedorPanel.add("panel", panel);
    CardLayout cl = (CardLayout) contenedorPanel.getLayout();
    cl.show(contenedorPanel, "panel");
  }
}
